﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
namespace OrmTest
{
    internal class UnitManyToMany4
	{
		public static void Init()
		{
			var db = NewUnitTest.Db;
			db.CodeFirst.InitTables<OperatorInfo, Role, OptRole>();
			db.DbMaintenance.TruncateTable<OperatorInfo, Role, OptRole>();
			db.Insertable(new OperatorInfo()
			{
				 id="1",
				  createTime=DateTime.Now,	
				   isDel=1,
				    isDisabled=1,
					 openid="",
					  phone="",
					   pwd="",
					    realname="a01",
						 remark="a",
						   sno="a",
						    username="a01"
			}).ExecuteCommand();
			db.Insertable(new OperatorInfo()
			{
				id = "2",
				createTime = DateTime.Now,
				isDel = 1,
				isDisabled = 1,
				openid = "",
				phone = "",
				pwd = "",
				realname = "a01",
				remark = "a",
				sno = "a",
				username = "admin"
			}).ExecuteCommand();
			db.Insertable(new OperatorInfo()
			{
				id = "3",
				createTime = DateTime.Now,
				isDel = 1,
				isDisabled = 1,
				openid = "",
				phone = "",
				pwd = "",
				realname = "a01",
				remark = "a",
				sno = "a",
				username = "admin"
			}).ExecuteCommand();
			var id=db.Insertable(new Role()
			{
				 id=1,
				  createTime=DateTime.Now,
				   name="admin1"

			}).ExecuteReturnIdentity();
			var id2 = db.Insertable(new Role()
			{
				id = 2,
				createTime = DateTime.Now,
				name = "admin2"

			}).ExecuteReturnIdentity();


			db.InsertNav(new OperatorInfo()
			{
				id = "1113",
				createTime = DateTime.Now,
				isDel = 1,
				isDisabled = 1,
				openid = "",
				phone = "",
				pwd = "",
				realname = "a01",
				remark = "a",
				sno = "a",
				username = "admin",
				Roles = new List<Role>() { new Role() { id = 2 } }
			}).Include(z => z.Roles,
									new InsertNavOptions()
									{
										ManyToManySaveMappingTemplate = new OptRole()
										{
											CreateTime = "2020",
											OrgId ="1x"

										}
									})
			.ExecuteCommand();

			var list=db.Queryable<OperatorInfo>()
				.Where(x=>x.id== "1113").Includes(x => x.Roles).ToList();

			var mapping = db.Queryable<OptRole>().Where(x => x.operId == "1113").First();
			if (mapping.OrgId != "1x"||mapping.CreateTime!="2020"|| list.First().Roles.Count!=1) 
			{
				throw new Exception("unit error");
			}

            db.UpdateNav(new OperatorInfo()
            {
                id = "1113",
                createTime = DateTime.Now,
                isDel = 1,
                isDisabled = 1,
                openid = "",
                phone = "",
                pwd = "",
                realname = "a01",
                remark = "a",
                sno = "a",
                username = "admin",
                Roles = new List<Role>() { new Role() { id = 2 } }
            }).Include(z => z.Roles,
                                    new UpdateNavOptions()
                                    {
                                        ManyToManySaveMappingTemplate = new OptRole()
                                        {
                                            CreateTime = "1010",
                                            OrgId = "1x"

                                        }
                                    })
            .ExecuteCommand();

        }

			/// <summary>
			/// 描述：
			/// 作者：synjones
			/// 时间：2022-04-20 21:30:28
			/// </summary>
			[SugarTable("unit_operatorinfoasdfa31")]
		public partial class OperatorInfo
		{           /// <summary>
					/// 多角色
					/// </summary>
			[Navigate(typeof(OptRole), nameof(OptRole.operId), nameof(OptRole.roleId))]//名字换
			public List<Role> Roles { get; set; }
			/// <summary>
			/// 主键
			/// </summary>
			[SugarColumn(IsPrimaryKey = true, ColumnName = "MYID")]
			public string id { get; set; }

			/// <summary>
			/// 姓名
			/// </summary>
			public string realname { get; set; }

			/// <summary>
			/// 账号
			/// </summary>
			public string username { get; set; }

			/// <summary>
			/// 密码
			/// </summary>
			public string pwd { get; set; }

			/// <summary>
			/// 学号
			/// </summary>
			public string sno { get; set; }

			/// <summary>
			/// openid
			/// </summary>
			public string openid { get; set; }

			/// <summary>
			/// 手机号码
			/// </summary>
			public string phone { get; set; }

			/// <summary>
			/// 备注信息
			/// </summary>
			public string remark { get; set; }

			/// <summary>
			/// 创建日期
			/// </summary>
			public DateTime createTime { get; set; }

			/// <summary>
			/// 状态（1：启用，2：禁用）
			/// </summary>
			public int isDisabled { get; set; }

			/// <summary>
			/// 是否删除（1：正常；2：删除）
			/// </summary>
			public int isDel { get; set; }

		}

		/// <summary>
		/// 描述：
		/// 作者：synjones
		/// 时间：2022-04-20 21:30:28
		/// </summary>
		[SugarTable("unit_role1adsfa")]
		public partial class Role
		{
			/// <summary>
			/// 角色
			/// </summary>
			[SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "MYID")]
			public int id { get; set; }

			/// <summary>
			/// 角色名称
			/// </summary>
			public string name { get; set; }

			/// <summary>
			/// 创建时间
			/// </summary>
			public DateTime createTime { get; set; }
 
		}

 
		/// <summary>
		/// 描述：
		/// 作者：synjones
		/// 时间：2022-04-21 14:35:09
		/// </summary>
		[SugarTable("unit_operator_roleadfaa")]
		public partial class OptRole
		{
			/// <summary>
			/// 
			/// </summary>
			[SugarColumn(IsPrimaryKey = true,ColumnName ="MYID")]
			public long id { get; set; }

			/// <summary>
			/// 
			/// </summary>
			[SugarColumn(ColumnName="AID")]			
			public string operId { get; set; }

            [SugarColumn(ColumnName = "bid")]
            public int roleId { get; set; }
            [SugarColumn(ColumnName = "ct")]
            public string CreateTime { get; set; }
            [SugarColumn(ColumnName = "oid")]
            public string OrgId { get; set; }


		}
	}
}
